package com.cbgolf.oa.app;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import com.cbgolf.oa.R;
import com.cbgolf.oa.util.Util;
import java.util.Stack;

/**
 * 应用程序Activity管理类：用于Activity管理和应用程序退出
 *
 * @author liux (http://my.oschina.net/liux)
 * @version 1.0
 * @created 2012-3-21
 */
public class AppManager {

  private static Stack<Activity> activityStack;
  private static AppManager instance;

  private AppManager() {
  }

  /**
   * 单一实例
   */
  public static AppManager getNewInstance() {
    if (instance == null) {
      instance = new AppManager();
    }
    return instance;
  }

  /**
   * 添加Activity到堆栈
   */
  public void addActivity(Activity activity) {
    if (activityStack == null) {
      activityStack = new Stack<Activity>();
    }
    activityStack.add(activity);
  }

  /**
   * 获取当前Activity（堆栈中最后一个压入的）
   */
  public Activity currentActivity() {
    if (null != activityStack && activityStack.size() > 0) {
      Activity activity = activityStack.lastElement();
      return activity;
    }
    return null;
  }

  /**
   * 结束当前Activity（堆栈中最后一个压入的）
   */
  public void finishActivity() {
    if (null != activityStack && activityStack.size() > 0) {
      Activity activity = activityStack.lastElement();
      finishActivity(activity);
    }
  }

  /**
   * 结束指定的Activity
   */
  public void finishActivity(Activity activity) {
    if (null != activityStack && activityStack.size() > 0) {
      if (activity != null) {
        activity.finish();
        activityStack.remove(activity);
        activity = null;
      }
    }

  }

  public void removeActivity(Activity activity) {
    if (null != activityStack && activityStack.contains(activity)) {
      activityStack.remove(activity);
    }
  }

  /**
   * 结束指定类名的Activity
   */
  public void finishActivity(Class<?> cls) {
    if (null == cls) {
      return;
    }
    if (null != activityStack && activityStack.size() > 0 && activityStack.contains(cls)) {
      for (Activity activity : activityStack) {
        if (activity.getClass().equals(cls)) {
          finishActivity(activity);
          activityStack.remove(activity);
        }
      }
    }
  }

  /**
   * 结束所有Activity
   */
  public void finishAllActivity() {
    if (null != activityStack && activityStack.size() > 0) {
      for (int i = 0, size = activityStack.size(); i < size; i++) {
        if (null != activityStack.get(i)) {
          activityStack.get(i).finish();
        }
      }
      activityStack.clear();
    }
  }

  public void finishOthersActivity(Activity activity) {
    try {
      String name = activity.getLocalClassName();
      if (Util.isNull(name)) {
        return;
      }
      String otherName = "";
      if (null != activityStack && activityStack.size() > 0) {
        for (int i = 0; i < activityStack.size(); i++) {
          if (null != activityStack.get(i)) {
            otherName = activityStack.get(i).getLocalClassName();
            if (!Util.isEquals(name, otherName)) {
              activityStack.get(i).finish();
              try {
                activityStack.get(i).overridePendingTransition(R.anim.in_from_left,
                    R.anim.out_from_right);
              } catch (Exception e) {
              }
              activityStack.remove(i);

            }
          }
        }
      }
    } catch (Exception e) {

    }
  }

  public Activity getStaskTopActivity() {
    if (null != activityStack && activityStack.size() > 0) {
      return activityStack.get(activityStack.size() - 1);
    }
    return null;
  }

  /**
   * 退出应用程序
   */
  public void AppExit(Context context) {
    try {
      finishAllActivity();
      ActivityManager activityMgr = (ActivityManager) context
          .getSystemService(Context.ACTIVITY_SERVICE);
      activityMgr.restartPackage(context.getPackageName());
      android.os.Process.killProcess(android.os.Process.myPid());
      System.exit(0);
    } catch (Exception e) {
    }
  }
}